import { defineConfig } from 'vite'
import { fileURLToPath, URL } from "node:url";
import autoprefixer from "autoprefixer";
import vue from '@vitejs/plugin-vue'
import Components from "unplugin-vue-components/vite";
import { VantResolver } from "unplugin-vue-components/resolvers";
import pptv from "postcss-px-to-viewport-8-plugin";
import viteCompression from 'vite-plugin-compression'
const load_pptv = pptv({
  unitToConvert: "px", // 要转化的单位
  viewportWidth: 375, // UI设计稿的宽度
  unitPrecision: 6, // 转换后的精度，即小数点位数
  propList: ["*"], // 指定转换的css属性的单位，*代表全部css属性的单位都进行转换
  viewportUnit: "vw", // 指定需要转换成的视窗单位，默认vw
  fontViewportUnit: "vw", // 指定字体需要转换成的视窗单位，默认vw
  selectorBlackList: ["ignore-"], // 指定不转换为视窗单位的类名，
  minPixelValue: 1, // 默认值1，小于或等于1px则不进行转换
  mediaQuery: true, // 是否在媒体查询的css代码中也进行转换，默认false
  replace: true, // 是否转换后直接更换属性值
  // exclude: [/node_modules\/vant/i],// 设置忽略文件，用正则做目录名匹配
  landscape: false, // 是否处理横屏情况
});
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(),
  viteCompression({
    verbose: true,
    disable: false,
    threshold: 10240,
    algorithm: 'gzip',
    ext: '.gz',
  }),
  Components({
    resolvers: [VantResolver()],
  })],
  build: {
    chunkSizeWarningLimit: 1500,
    minify: 'terser',// 混淆器，terser构建后文件体积更小
    rollupOptions: {
      output: {
        chunkFileNames: 'static/js/[name]-[hash].js',
        entryFileNames: 'static/js/[name]-[hash].js',
        assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
        manualChunks(id: any) { //静态资源分拆打包
          if (id.includes('node_modules')) {
            return id.toString().split('node_modules/')[1].split('/')[0].toString();
          }
        }
      }
    },
    //清除debugger
    terserOptions: {
      compress: {
        keep_infinity: true, // 防止 Infinity 被压缩成 1/0，这可能会导致 Chrome 上的性能问题
        drop_console: true, // 生产环境去除 console
        drop_debugger: true, // 生产环境去除 debugger
      },
    },
    //打包配置
  }, resolve: {
    alias: {
      "@": fileURLToPath(new URL("./src", import.meta.url)),
    },
  },
  server: {
    host: "0.0.0.0",
    port: 3000,
    proxy: {
      "/dev-api": {
        target: "http://192.168.0.110:8051", // 对应的代理地址 测试
        // target: "http://192.168.0.156:55320", // 对应的代理地址 开发
        secure: false, // 接受运行在https上，默认不接受
        changeOrigin: true, // 如果设置为true,那么本地会虚拟一个服务器接收你的请求并代你发送该请求，这样就不会有跨域问题（只适合开发环境）
        rewrite: (p: string) => p.replace(/^\/dev-api/, ""), //重写路径 比如'/apis/aaa/ccc'重写为'/aaa/ccc'

      },
      "/test-api": {
        target: "http://192.168.0.24:8080", // 对应的代理地址
        secure: false, // 接受运行在https上，默认不接受
        changeOrigin: true, // 如果设置为true,那么本地会虚拟一个服务器接收你的请求并代你发送该请求，这样就不会有跨域问题（只适合开发环境）
        rewrite: (p: string) => p.replace(/^\/test-api/, ""), //重写路径 比如'/apis/aaa/ccc'重写为'/aaa/ccc'
      },
      "/pro-api": {
        target: "http://10.112.10.31:8080", // 对应的代理地址
        secure: false, // 接受运行在https上，默认不接受
        changeOrigin: true, // 如果设置为true,那么本地会虚拟一个服务器接收你的请求并代你发送该请求，这样就不会有跨域问题（只适合开发环境）
        rewrite: (p: string) => p.replace(/^\/pro-api/, ""), //重写路径 比如'/apis/aaa/ccc'重写为'/aaa/ccc'
      },
    },
  },
  //在vite.config.ts中
  // vw方案（无像素差）：px自动转换vw
  css: {
    postcss: {
      plugins: [
        autoprefixer({
          overrideBrowserslist: [
            "Android 4.1",
            "iOS 7.1",
            "Chrome > 45",
            "ff > 31",
            "ie >= 8",
          ],
        }),
        load_pptv,
      ],
    },
  },
})
